package com.ks.pc.service;

import java.util.List;
import java.util.Map;

import com.ks.dto.BrandDto;
import com.ks.dto.ClassifyDto;
import com.ks.dto.ImgDto;
import com.ks.dto.PaginationDto;
import com.ks.dto.Product2Dto;
import com.ks.dto.ProductDto;

/**
 * 公共接口
 * 
 * @author jxzhang on 2017年2月18日
 * @Verdion 1.0 版本
 */
public interface CommonService {

	/**
	 * 获取所有分类
	 * 
	 * @return
	 */
	List<ClassifyDto> queryClassifyAll();

	/**
	 * 模糊查询分类
	 * 
	 * @param param
	 * @return
	 */
	List<ClassifyDto> queryClassifyBySearchTxt(Map<String, Object> param);

	/**
	 * 通过分类Id获取所有品牌
	 * 
	 * @param classifyId
	 * @return
	 */
	List<BrandDto> queryBrandAllByClassifyId(Integer classifyId);

	/**
	 * 通过品牌Id获取所有产品
	 * 
	 * @param brandId
	 * @return
	 */
	List<Product2Dto> queryProductAllByBrandId(Integer brandId);

	/**
	 * 模糊查询产品
	 * 
	 * @param searchTxt
	 * @return
	 */
	List<Product2Dto> queryProductBySearchTxt(Map<String, Object> param);

	/**
	 * 获取所有产品
	 * 
	 * @return
	 */
	List<Product2Dto> queryProductAll();

	/**
	 * 通过分类Id获取所有产品 内部调用 </br>
	 * queryProductAllByClassifyId(Integer classifyId, List<Product2Dto> dtos);
	 * 
	 * @param classifyId
	 *            分类Id
	 * @return
	 */
	List<Product2Dto> queryProductAllByClassifyId(Integer classifyId);

	/**
	 * 通过分类Id获取所有产品
	 * 
	 * @param classifyId
	 *            分类Id
	 * @param dtos
	 *            所有产品
	 * @return
	 */
	List<Product2Dto> queryProductAllByClassifyId(Integer classifyId, List<Product2Dto> dtos);

	/**
	 * 通过Id获取产品详细
	 * 
	 * @param productId
	 * @return
	 */
	ProductDto findProductById(Integer productId);

	/**
	 * 插入图片
	 * 
	 * @param dto
	 * @return
	 */
	boolean insertImgDto(ImgDto dto);

	/**
	 * 检查session是否过期
	 */
	void checkSessionTimeout();

	/**
	 * 多值Map，按classify的showIndex分组。
	 * 
	 * @param list
	 * @return
	 */
	Map<Integer, List<Product2Dto>> groupByShowIndexClassify(List<Product2Dto> list);

	/**
	 * 通过条件获取品牌
	 * 
	 * @param classifyId
	 *            分类ID
	 * @param page
	 *            页号
	 * @param rows
	 *            每页多少行
	 * @param searchTxt
	 *            模糊条件
	 * @return
	 */
	PaginationDto<BrandDto> queryBrandByCondition(Integer classifyId, Integer page, Integer rows, String searchTxt);

	PaginationDto<ClassifyDto> queryClassifyByCondition(Integer page, Integer rows, String searchTxt);

}
